Recette n 38 Rcuprer des donnes de manire asynchrone
Page 113


Mthode 1 : Listeners
public interface AsyncListener {
 public void chargementTermine(URL u, String contenu);
}

public class AsyncLoader extends Thread {
   private URL urlACharger = null;
   private AsyncListener delegate = null;

   public AsyncLoader(URL u, AsyncListener l) {
      urlACharger = u;
      delegate = l;
   }

   public void run() {
      try {
         HttpURLConnection urlConnection = (HttpURLConnection) urlACharger.openConnection();
         InputStream in = urlConnection.getInputStream();
         BufferedReader reader = new BufferedReader(new InputStreamReader(in));
         String result, line = reader.readLine();
         result = line;
         while((line=reader.readLine())!=null){
            result+=line+'\n';
         }

         delegate.chargementTermine(urlACharger, result);
      } catch(MalformedURLException m) {
         System.err.println("L'URL " + urlACharger + " n'est pas correcte");
      } catch(IOException io) {
         System.err.println("Le chargement de l'URL " + urlACharger + " a chou avec l'erreur suivante : " + io.getLocalizedMessage());
      }
   }
}

Mthode 2 : classes internes
public abstract class AsyncLoader {
   protected void chargementTermine(URL u, String contenu); //  surcharger par les classes qui serviront au chargement

   protected void chargerContenu(URL u) {
      new Thread(new Runnable() {
         public void run() {
            try {
               HttpURLConnection urlConnection = (HttpURLConnection) u.openConnection();
               InputStream in = urlConnection.getInputStream();
               BufferedReader reader = new BufferedReader(new InputStreamReader(in));
               String result, line = reader.readLine();
               result = line;
               while((line=reader.readLine())!=null){
                  result+=line+'\n';
               }

               chargementTermine(u, result);
            } catch(MalformedURLException m) {
               System.err.println("L'URL " + urlACharger + " n'est pas correcte");
            } catch(IOException io) {
               System.err.println("Le chargement de l'URL " + urlACharger + " a chou avec l'erreur suivante : " + io.getLocalizedMessage());
            }

         }
      }).start();
   }
}
